package com.molichuxing.services.business.service;

import java.util.List;
import java.util.Map;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.exception.BizException;
import com.molichuxing.services.business.dto.request.create.AccidentCaseCreateBizDto;
import com.molichuxing.services.business.dto.request.create.AccidentCreateBizDto;
import com.molichuxing.services.business.dto.request.create.AccidentExamineCreateDto;
import com.molichuxing.services.business.dto.response.AccidentBizDto;
import com.molichuxing.services.business.dto.response.AccidentCaseDetailAppDto;
import com.molichuxing.services.business.dto.response.AccidentDetailAppBizDto;
import com.molichuxing.services.business.dto.response.AccidentDetailDto;
import com.molichuxing.services.business.dto.response.AccidentDownloadBizDto;

/**
 * <p>
 * 车辆事故信息服务类
 * </p>
 *
 * @author 
 * @since 2019-07-29
 */
public interface CarAccidentBizService {

  /**
   * 根据查询条件获取车辆事故列表信息
   *    * licencePlate 车牌号
   *    * vin 车架号
   *    * userId 用户id
   *    * liabilityType 责任类型（0：无责，1：全责，2：主责，3：同责，4：次责）
   *    * isCasualty 是否有人伤（0：无人伤，1：有人伤）
   *    * accidentType 事故类型（1:单方事故，2：双方事故，3：多方事故，4：停放受损，5：车辆盗抢，6：车辆自燃，7：车辆涉水，8：重大自然灾害）
   *    * accidentStartTime     出险开始时间
   *    * accidentEndTime     出险结束时间
   *    * status 事故状态（1：事故未确认，2：事故已确认，3：结案未确认，4：已结案，5：无效报备）
   * @param map
   * @param pageSize
   * @param pageNum
   * @return
   */
  Paged<AccidentBizDto> getCarAccidentPage(Map<String, Object> map, Integer pageNum, Integer pageSize);

  /**
   * 根据车辆id获取事故
   * @param carId
   * @return
   */
  List<AccidentBizDto> getAccidentByCarId(Integer carId);

  /**
   * 根据事故id获取事故信息
   * @param accidentId
   * @return
   * @throws Exception
   */
  AccidentDetailDto getAccident(Integer accidentId) throws Exception;

  /**
   * 审核事故
   * @param createDto
   * @return
   */
  Boolean modifyExamineAccident(AccidentExamineCreateDto createDto) throws Exception;


  /**
   * app端根据事故id获取事故信息
   * @param accidentId
   * @return
   * @throws Exception
   */
  AccidentDetailAppBizDto getAppAccident(Integer accidentId)throws Exception;

  /**
   * app端结案详情
   * @param accidentId
   * @return
   * @throws Exception
   */
  AccidentCaseDetailAppDto getAccidentCaseDetailApp(Integer accidentId)throws Exception;


  /**
   * 创建事故报备信息
   * @param accidentCreateBizDto
   * @return
   */
  Boolean createAccidentCreateBiz(AccidentCreateBizDto accidentCreateBizDto)throws Exception;


  /**
   * 创建结案信息
   * @param accidentCaseCreateBizDto
   * @return
   */
  Boolean createAccidentCaseCreateBiz(AccidentCaseCreateBizDto accidentCaseCreateBizDto) throws Exception,BizException;
  
  /**
   * 查询事故报备导出数据
   *    * ids id集合
   *    * licencePlate 车牌号
   *    * vin 车架号
   *    * userId 用户id
   *    * liabilityType 责任类型（0：无责，1：全责，2：主责，3：同责，4：次责）
   *    * isCasualty 是否有人伤（0：无人伤，1：有人伤）
   *    * accidentType 事故类型（1:单方事故，2：双方事故，3：多方事故，4：停放受损，5：车辆盗抢，6：车辆自燃，7：车辆涉水，8：重大自然灾害）
   *    * accidentStartTime     出险开始时间
   *    * accidentEndTime     出险结束时间
   *    * status 事故状态（1：事故未确认，2：事故已确认，3：结案未确认，4：已结案，5：无效报备）
   * @param map
   * @return
   */
  public List<AccidentDownloadBizDto> getAccidentDownload(Map<String, Object> map);

	/**
	 * 查询事故报备导出数据条数
	 * 
	 * @param selectParams
	 * @return
	 */
	public Long getAccidentDownloadCount(Map<String, Object> selectParams);
}
